//
//  ReadMe.h
//  HBWeibo
//
//  Created by Beans on 16/6/23.
//  Copyright © 2016年 iceWorks. All rights reserved.
//

/*
 
 xcode4.0 -> iOS5.0 iPhone4s
 xcode4.3 -> iOS6.0 iPhone5
 xcode5.0 -> iOS7.0 iPhone5s
 xcode6.0 -> iOS8.0 swift1.0
 xcode7.0 -> iOS9.0 swift2.0    xcode7.3 -> swift2.2
 xcode8.0 beta -> iOS10.0 swift3.0
 
 企业开发思想
 1. 紧盯特殊/难点功能. 但实现时要把特殊/难点放在最后, 先去实现普通/共有的功能, 以便形成思路
 2. 遇到新东西时, 思考线索, 根据线索查看API, 然后一个一个方法去试
 3. 把一些重复的或者没用的东西, 屏蔽在底层实现上
 4. 一个一个解决问题, 不要有任何关联; 待所有问题解决后, 再具体关联


 面试题:
 1. 面向对象的三大特点: 封装/继承/多态
 2. 视图控制器中, view的声明周期(viewDidLoad 走几次? viewWillAppear会走几次?)
 

 第一.
 1. 先完成普通的tabBar的实现
 2. 修改tabBarItem控件的位置
 3. 再添加一个点击的控件
 
 第二. 访客视图的实现 -- 自定义视图都可以按这样的步骤进行
 1. 懒加载控件
 2. 添加控件实现布局
 3. 实现一些功能

// 自定义视图三部曲
// 第一步: 重写构造函数
override init(frame: CGRect) {
    super.init(frame: frame)
    setupUI()
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

// 第二步: 定义一个方法, 来实现视图的添加和布局
private func setupUI() {

}

// 第三步: 懒加载控件


 第三. oauth授权认证
 1. 加载网页
 2. 输入用户名和密码, 点击登录
 3. 点击授权(授权页面很少出现)
 4. 返回一个url, 改url中含有一个code
 5. 获取这个codes, 通过网络请求, 来获取Token(令牌)
 6. 通过令牌来获取个人信息/微博信息等用户信息
 
 第四. 接口文档 -- 从服务器获取数据的唯一文档
 接口文档都需要看哪些东西
 1. URL
 2. 请求方式
 3. 请求参数[重点] -- 哪些参数是必选的
 // https://api.weibo.com/oauth2/authorize?client_id=308738166&redirect_uri=http://www.itcast.cn&response_type=code
 4. 返回参数
 5. 请求实例及返回实例[可选]
 
 第五. 去开放平台申请应用 -- 所有授权的第三方分享都需要去开放平台申请注册应用
 1. 去open.weibo.com 申请开发者 (前提: 拥有微博账号)
 2. 点击创建应用, 完善个人信息. (注意邮箱需要验证)
 3. 点击微连接, 创建移动应用
 4. 完善移动应用信息
 5. 在基本信息里, 获取AppKey和AppSecret
 6. 在高级信息里, 设置授权回调页
 7. 在测试信息里, 添加想要成为测试的账号昵称
 
 视图切换:
 没有登录的时候, 显示访客视图(tabBarVc);
 点击注册, 授权成功之后跳转到欢迎界面;
 欢迎界面动画完成后跳转到首页()
 
 数据库:
 1. iOS数据库属于嵌入式数据库
 2. 数据库开启/关闭很耗费资源, 一般在程序启动时打开
 
 常见设计模式:
 单例模式
 代理设计模式
 Target-Action
 观察者
 工厂设计模式
 桥接设计模式
 相应者链
 
 question: 
 1. 关于指定构造函数不是很明白, 自定义视图/控制器/控件等内部是不是首先应调用指定构造函数呢? 与loadView()等有什么区别? 另外老师还有哪些初始化用的方法/函数呢? (一次性或非一次性的, OC/swift)
 2. swift工程想引用某OC第三方库, 如果该库不支持CocoaPods, 那么需要用"桥接"吗? 这里的桥接与之前quartz2D等绘图时CGImage的桥接有何异同?
 3. CocoaPods的使用问题, 发现需要添加"target 'sinaWeibo' do...end"字样才能执行? 另外为什么'SnapKit','0.19.0'这里需要降低版本号呢?
 
 1. 下拉刷新与上拉加载更多的控制参数since_id/max_id理解不透, 尤其是二者组合使用时搞不明白;
 2. 自定义下拉刷新中, 使用了KVO模式, 如果其它类中也用到了KVO碰巧key值相同(冲突)时该怎么办?{工作中旧项目可能会遇到}. 能有替代方案么?  KVO除了使用较简单, 与通知传值的差异是什么?
 触发机制不一样. KVO时刻监听属性变化, 通知需要触发. 通知被动接收
 
 1. 关于emoji表情. emoji定义为`String?`格式, 设置为button的title, 通过font调节大小. 不清楚是怎么回事, 与普通图片有什么区别?
 2. 关于类扩展的问题. 给UIButton添加了一个convince的构造函数, 但是target事件总是崩溃(用的是if let解包), 不明白怎么回事. 另外齐老师可以跟我们分享下更多关于方法抽取以及类扩展方面的知识么, 谢谢!!
*/